// @author: caoshi
// @date: 2021-05-21 12:52
package ctl

import (
	"encoding/json"
	"fmt"
	"gradetable/src/domain"
	"gradetable/src/domain/resp"
	"gradetable/src/service"
	"io/ioutil"
	"net/http"
)

// 用于解析请求数据 -- json
// 前端传来的是一个json对象, 两个key分别是 cols 和  gradeList
// 值都是一个json数组, 所以要定义成切片类型
type SaveVo struct {
	Cols      []domain.Col   `json:"cols"`
	GradeList []domain.Grade `json:"gradeList"`
}

// 保存成绩
func Save(w http.ResponseWriter, r *http.Request) {
	body := r.Body
	//fmt.Println(body)
	byts, _ := ioutil.ReadAll(body)
	var vo = SaveVo{}
	_ = json.Unmarshal(byts, &vo)
	//fmt.Println(vo)
	//fmt.Println(vo.Cols)
	//fmt.Println(vo.GradeList)
	grades := vo.GradeList
	count := service.SaveGrades(grades)
	if count > 0 {
		bs, _ := json.Marshal(resp.Ok("success", count))
		_, _ = fmt.Fprintf(w, string(bs))
	} else {
		bs, _ := json.Marshal(resp.Error("error", nil))
		_, _ = fmt.Fprintf(w, string(bs))
	}
}

func ListAll(w http.ResponseWriter, r *http.Request) {
	grades := service.QueryForSlice()
	//bs, _ := json.Marshal(grades)
	//gradesJsonStr := string(bs)	// 得到json字符串 [{}, {}...]
	//fmt.Println(gradesJsonStr)
	//_, _ = fmt.Fprintf(w, gradesJsonStr)
	// 上面的操作没有将数据封装到统一的响应对象 resp.ResultBean 中, 所以在前端直接
	// 用 res.data 即可取到数据.
	// 下面将数据对象封装到统一的响应对象中
	//
	ok := resp.Ok("查询全部数据成功", grades)
	bs, _ := json.Marshal(ok)
	fmt.Println(string(bs))
	_, _ = fmt.Fprintf(w, string(bs))
}
